package function;

import java.util.Random;

public class DataEnAndDe {
	private Random ra=new Random();
	//���� 
	public String dataDecrypt(String data) {
		System.out.println("?????="+data);
		String n="";
		if(data!=null) {
			for(int i=0;i<data.length();i++) {
				if(data.charAt(i)<128) {
					String k=buqi(16,DtoB(data.charAt(i)));
					n+=(char)BtoD(BtoVR(k.substring(0, 8))+BtoVR(k.substring(8)));
				}else {
					String k=buqi(16,DtoB(data.charAt(i)));
					n+=(char)BtoD(BtoVR(k.substring(0,8)));
					if(!k.substring(8).equals("00000000"))n+=(char)BtoD(BtoVR(k.substring(8)));
				}
			}
		}else return null;
		return n;
	}
	//����
	public String dataEncryption(String data) {
		String n="",m="";
		for(int i=0;i<data.length();) {
			if(data.charAt(i)<128) {
				n=BtoVL(DtoB(data.charAt(i)));
				if(i+1<data.length()) {
					if(data.charAt(++i)<128)n+=BtoVL(DtoB(data.charAt(i++)));
					else n+="00000000";
				}else{
					n+="00000000";
					i++;
				}
				m+=(char)BtoD(n);
			}else {
				m+=(char)(ra.nextInt(90)+33);
				n=buqi(16,DtoB(data.charAt(i++)));
				m+=(char)BtoD(BtoVL(n.substring(0, 8))+BtoVL(n.substring(8)));
			}
		}
		return m;
	}
	//BΪ�����ƣ�DΪʮ����
	//ʮ����ת������
	public String DtoB(int num) {
		String n="";
		while(true) {
			n=num%2+n;
			num=num/2;
			if(num==0)return n;
		}
	}
	//������תʮ����
	public int BtoD(String num) {
		int n=0,j=num.length()-1;
		for(int i=0;i<num.length();i++)n+=(num.charAt(i)-'0')*(int)Math.pow(2, j--);
		return n;
	}
	//�����Ƽ���
	public String BtoVL(String num) {
		num=buqi(8,num);
		return num.substring(5)+num.substring(0, 5);
	}
	//�����ƽ���
	public String BtoVR(String num) {
		num=buqi(8,num);
		return num.substring(3)+num.substring(0, 3);
	}
	//����
	public String buqi(int num,String str) {
		while(true)
			if(str.length()<num)str='0'+str;
			else break;
		return str;
	}
}
